首先對 Azure 管理資源的方式有個概念,好方便之後介紹 Azure 自動化。
在 Azure 我們有 5 種方式可以管理資源
Azure Portal
Azure PowerShell
Azure CLI
Azure SDK (C#、Java、Python)
Azure Rest API
90% 的需求依靠 Portal 都能解決,強調簡單、人性化 ,非常適合嘗試跟探索
。
但它不是部屬應用
程序或需要重複執行
任務的最佳選擇,所以會需要其他自動化技術。
以邏輯腳本方式部屬 Azure 資源,並且 Powershell 比起 bash 有更多的邏輯工具,在 windows 上面的整合度比較好 (畢竟是微軟的親孩子)。
舉例 : 可以使用 forloop 批量創建資源群組
foreach($i in 1..5){
$guid = [System.guid]::NewGuid().toString("N");
$group = New-AzResourceGroup -Name $guid -Location "eastasia" | select-Object ResourceGroupName,Location ;
Write-Host("創建 group $group");
}
但,對 Linux 工程師來說需要額外安裝 PowerShell Core才能使用,使用者會想我都有 python,幹嘛要浪費空間安裝
,還需要另外記一套語法、規則
做 Azure CLI 能做到的同樣效果。
Mac 跟 Linux 使用者習慣的 Bash Shell 風格,又能跟 Power Shell、Bash 兼容使用
,達到完全跨平台
的命令行效果。
舉例 : 創建群組
az group create --name "demo" --location eastasia
像是 Azure CLI 其實就是 Python + Azure Python SDK 編寫,它也有開源在 Github。
假如是一個開發團隊,做複雜的專案時推薦使用,在開發時可以有智能提示
,像 Java、C# SDK,又支援強型別
跟編譯前的檢查
舉例 : 使用 C# SDK 取得驗證動作
var credentials = SdkContext.AzureCredentialsFactory
.FromServicePrincipal("clientId", "secretKey", "tenantId",
AzureEnvironment.AzureGlobalCloud);
var restClient = RestClient
.Configure()
.WithEnvironment(AzureEnvironment.AzureGlobalCloud)
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.WithCredentials(credentials)
.Build();
using (var computeManagementClient = new ComputeManagementClient(restClient))
{
await computeManagementClient.VirtualMachines
.BeginDeallocateWithHttpMessagesAsync("resource-group-name", "vm-name");
}
拿來做 Azure Function 排程器管理資源,會是一個好選擇。
前面介紹了幾種方式,它們其實底層都有個共同點 : 都在後台調用 Azure REST API
這代表說任何支援 HTTP 請求的語言
只要調用 Azure REST API,就能完成 Azure 大部分的功能。
舉例 : 取用 token 創建 Azure 群組
curl -X POST -d 'grant_type=client_credentials&client_id=[APP_ID]&client_secret=[PASSWORD]&resource=https%3A%2F%2Fmanagement.azure.com%2F' https://login.microsoftonline.com/[TENANT_ID]/oauth2/token
curl -X PUT -H "Accept=application/json" -H "Content-Type: application/json" -H "Authorization: Bearer <<token>>" --data '{"location": "eastasia"}' https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}?api-version=2020-06-01
筆者個人總結比較,提供參考 :
使用場景 | 優點 | 缺點 | |
---|---|---|---|
Azure Portal | 日常管理、嘗試跟探索 | 可視化 | 自動化部屬 |
Azure PowerShell | 編寫複雜 自動化腳本 |
1. 在 windows 相容性好2. 比起 bash 更多功能 | 1. 在 linux 環境要特別安裝 PowerShell Core才能使用2. 對非 windows 工程師需要額外記一套語法 |
Azure CLI | 編寫跨平台 自動化腳本 |
跨平台、簡單 | |
Azure SDK | 團隊開發特定語言 APP 工具 |
能支援智能提示、編譯前檢查、強類型檢查 | |
Azure Rest API | 團隊開發跨平台、跨語言 管理 APP 開發 |
跨平台,能支援 TCP 的環境都能使用因為是底層,所以文檔也是最全面 | 需要編寫更多代碼或腳本 |